﻿' Created 5/11/2009, by Nassos Yiannopoulos


set views = Application.Desktop.ActiveLayout.Views
'set views = views.Filter("Material Manager")
set views = views.Filter("Render Tree")
for each view in views
	Application.LogMessage "View name : " & view.Name 
	Application.LogMessage "container : '" & view.GetAttributeValue("container") & "'"
	Application.LogMessage "Selected : '" & view.GetAttributeValue("selection") & "'"
	Selection.SetAsText view.GetAttributeValue("selection")
	if Selection.Count=0 then
		MsgBox "Please select an Architectural Shader node in the Render Tree", siMsgInformation, "Request"
	end if
	for each obj in Selection
		LogMessage "Shader : " & obj.Name
		set mia_multiout = CreateShaderFromPreset("$XSI_DSPRESETS\Shaders\Material\mental images\mia_Material_MultiOutput.Preset", obj.GetShaderContainer)
		set mia_render_channels = ImportShaderCompound(obj.GetShaderContainer, Application.InstallationPath(siUserPath) & "\Data\RTCompounds\mia_x Render Channels.xsirtcompound")
		
		for each p in obj.Parameters
			shaderParamType = obj.GetShaderParameterType(p.name)
			select case shaderParamType(1)
			case siUnknownParameterType
				typeString = "Unknown"
			case siBooleanParameterType
				typeString = "Boolean"
			case siColorParameterType
				typeString = "Color"
			case siDataParameterType
				typeString = "Data"
			case siIntegerParameterType
				typeString = "Integer"
			case siLensParameterType
				typeString = "Lens"
			case siLightParameterType
				typeString = "Light"
			case siMaterialParameterType
				typeString = "Material"
			case siMatrixParameterType
				typeString = "Matrix"
			case siModelParameterType
				typeString = "Model"
			case siProfileCurveParameterType
				typeString = "ProfileCurve"
			case siRealTimeParameterType
				typeString = "RealTime"
			case siReferenceParameterType
				typeString = "Reference"
			case siScalarParameterType
				typeString = "Scalar"
			case siShaderReferenceParameterType
				typeString = "ShaderReference"
			case siStringParameterType
				typeString = "String"
			case siStructParameterType
				typeString = "Struct"
			case siTextureParameterType
				typeString = "Texture"
			case siTextureSpaceParameterType
				typeString = "TextureSpace"
			case siVectorParameterType
				typeString = "Vector"
			case siLightmapParameterType
				typeString = "Lightmap"
			case else
				typeString = "<Unknown>"
			end select
			
			if shaderParamType(0)=true then 
				io_string = "Input"
			else 
				io_string = "Output"
			end if
			
			if shaderParamType(0)=True then
				if not p.IsClassOf(siCompoundParameterID) then 
					if shaderParamType(1)<>siUnknownParameterType and not (p.Source is Nothing) then
						'logmessage io_string & " " & typeString & " param: '" & p.Name & "' type (" & p.Type & ")  is connected"
						mia_multiout.Parameters(p.Name).Connect(p.Source)
					else
						' Copy the Value
						'logmessage io_string & " " & typeString & " param: '" & p.Name & "' has class (" & TypeName(p) & ") type (" & p.Type & ") and value = " & p.Value
						'logmessage io_string & " " & typeString & " param: '" & p.Name & "' has value = " & p.Value
						if shaderParamType(1)<>siTextureSpaceParameterType then
							mia_multiout.Parameters(p.Name).Value = p.Value
						end if
					end if
				else
					' Compound Parameter
					if (p.Source is Nothing) then
						'logmessage io_string & " " & typeString & " param: '" & p.Name & "' has class (" & TypeName(p) & ") type (" & p.Type & ")"
						if shaderParamType(1)=siColorParameterType then
							SetValue mia_multiout & "." & p.Name & ".red", GetValue(obj & "." & p.Name & ".red")
							SetValue mia_multiout & "." & p.Name & ".green", GetValue(obj & "." & p.Name & ".green")
							SetValue mia_multiout & "." & p.Name & ".blue", GetValue(obj & "." & p.Name & ".blue")
							SetValue mia_multiout & "." & p.Name & ".alpha", GetValue(obj & "." & p.Name & ".alpha")
							'if not (obj.Parameters(p.Name & ".alpha") is Nothing) then
							'	mia_multiout.Parameters(p.Name & ".alpha").Value = obj.Parameters(p.Name & ".alpha").Value
							'end if 
						end if
					else
						'logmessage io_string & " " & typeString & " param: '" & p.Name & "' has class (" & TypeName(p) & ") type (" & p.Type & ") is connected"
					end if
				end if
			else
				' Output Parameter
			end if
			
		next
		
		for each p in mia_multiout.Parameters
			shaderParamType = mia_multiout.GetShaderParameterType(p.name)
			if shaderParamType(0) = False and not (mia_render_channels.Parameters(p.Name) is Nothing) then
				'Output Parameter
				'logmessage "Connecting " & p.Name & " to " & mia_render_channels
				mia_render_channels.Parameters(p.Name).Connect(p)
			end if
		next
		
		for each p in mia_render_channels.Parameters
			shaderParamType = mia_render_channels.GetShaderParameterType(p.name)
			if shaderParamType(0) = True and shaderParamType(1)=siBooleanParameterType then
				'Input checkmark
				p.Value = True
			end if
		next

	next
next
